/**
 * 事件循环: 在浏览器中js运行是单线程的,但是实际过程中有很多操作需要延迟加载
 *          js不可能等待延迟时间结束在往下执行,所以需要一种机制来处理当同时存在
 *          同步和异步任务时候js引擎应当如何操作,这种机制称为事件循环,需要注意的
 *          是js事件循环和js事件绑定不是一个概念,js事件绑定是指给某个dom节点绑定
 *          触发事件，当页面中点击dom节点时触发对应的事件。
 * 事件循环机制大概分为三部分: 主线程 宏队列 微队列 (异步代码都会放入到微/宏队列)
 * -- 宏任务: script setTimeout setInterval setImmeditate I/O操作, UI rendering
 *    Tip: - `setImmediate` 尽可能快地在当前事件循环的下一个迭代中执行函数。一般在node.js
 *          环境中使用,浏览器端不可用
 * -- 微任务: process.nextTick promise object.observe 
 * 
 * 
*/
Promise.resolve().then(()=>{
  console.log("Promise1");
  setTimeout(()=>{
    console.log("setTimeout2");
  },0)
})
setTimeout(()=>{
  console.log("setTimeout1");
  Promise.resolve().then(()=>{
    console.log("Promise2");
  })
},0)
console.log('start');
